package br.com.dallasmotopecas.venda.status.managerbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.dallasmotopecas.comum.agenda.controller.AgendaStatusController;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaStatusVo;
import br.com.dallasmotopecas.util.exception.AlterarObjetoException;
import br.com.dallasmotopecas.util.exception.CampoObrigatorioException;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.DirecionamentoPaginaException;
import br.com.dallasmotopecas.util.exception.InserirObjetoException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;
import br.com.dallasmotopecas.util.managerbean.AbstractManagerBean;

@ManagedBean(name="agendaStatusManagerBean")
@ViewScoped
public class AgendaStatusManagerBean extends AbstractManagerBean implements Serializable
{
	private static final long serialVersionUID = 1L;
	private AgendaStatusVo agendaStatusVo = null;
	private List<AgendaStatusVo> listaAgendaStatus;
	
	public AgendaStatusManagerBean()
	{
		
	}
	
	@PostConstruct
	public void init()
	{
		try
		{
			if (!isUsuarioLogado())
			{
				redirecionarPagina("/Index.jsf");
				return;
			}
			processaPermissaoUsuario(getUsuarioLogado());
			iniciarAgendaStatus();
		}
		catch(DirecionamentoPaginaException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
	}
	
	@PreDestroy
	public void destroy()
	{
		getListaAgendaStatus().clear();
		setListaAgendaStatus(null);
		setAgendaStatusVo(null);
	}
	
	public AgendaStatusVo getAgendaStatusVo()
	{
		if (agendaStatusVo == null) agendaStatusVo = new AgendaStatusVo();
		
		return agendaStatusVo;
	}

	public void setAgendaStatusVo(AgendaStatusVo agendaStatusVo)
	{
		this.agendaStatusVo = agendaStatusVo;
	}

	public List<AgendaStatusVo> getListaAgendaStatus()
	{
		if (listaAgendaStatus == null) listaAgendaStatus = new ArrayList<AgendaStatusVo>();
		
		return listaAgendaStatus;
	}

	public void setListaAgendaStatus(List<AgendaStatusVo> listaAgendaStatus)
	{
		this.listaAgendaStatus = listaAgendaStatus;
	}

	private void iniciarAgendaStatus()
	{
		AgendaStatusController agendaStatusController = null;
		try
		{
			agendaStatusController = new AgendaStatusController(getContexto());
			agendaStatusController.carregarListaAgendaStatus(getListaAgendaStatus());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (agendaStatusController != null)
			{
				agendaStatusController.close();
				agendaStatusController = null;
			}
		}
	}
	
	public void iniciarInserir()
	{
		setAgendaStatusVo(new AgendaStatusVo());
		abrirModal("agendaStatusDialog");
	}
	
	public void iniciarAlterar(AgendaStatusVo agendaStatusVo)
	{
		setAgendaStatusVo(agendaStatusVo);
		abrirModal("agendaStatusDialog");
	}
	
	public void gravar()
	{
		AgendaStatusController agendaStatusController = null;
		try
		{
			agendaStatusController = new AgendaStatusController(getContexto());
			
			if (getAgendaStatusVo().getId() == 0)
				agendaStatusController.inserirAgenda(getAgendaStatusVo());
			else
				agendaStatusController.alterarAgenda(getAgendaStatusVo());
			
			iniciarAgendaStatus();
			fecharModal("agendaStatusDialog");
			
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (CampoObrigatorioException e)
		{	
			processarMensagem(MENSAGEM_INFORMATIVA, e.getMessage());
		}
		catch (AlterarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (InserirObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (agendaStatusController != null)
			{
				agendaStatusController.close();
				agendaStatusController = null;
			}
		}
	}
	
	public void sair()
	{
		try
		{
			redirecionarPagina("/view/venda/Home.jsf");
		}
		catch (DirecionamentoPaginaException e)
		{	
			e.printStackTrace();
		}
	}
}
